﻿using CSCSN.Foundation.SpecificationsForEntityModel;
using CSCSN.ViewModels;
using CSCSN.ViewModelServices;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace CSCSN.WebApplication.BaseControllers
{
    /// <summary>
    /// 分页方式的实体模型数据处理控制器模板
    /// </summary>
    /// <typeparam name="TEntity"></typeparam>
    /// <typeparam name="TViewModel"></typeparam>
    public class BasePaginationTemplateController<TEntity, TViewModel> : Controller
        where TEntity : class, IEntity, new()
        where TViewModel : class, IEntityViewModel, new()
    {

      

        // 导航类型的实体模型名称，在使用到导航页模板的时候，派生控制器必须设置这个参数
        public string TypeName;

        // 实体模型和视图数据服务访问处理服务
        private readonly IViewModelService<TEntity, TViewModel> _viewModelService;
        // 公开的实体模型和视图数据服务访问处理服务，便于继承于这个控制器的派生控制器使用
        public IViewModelService<TEntity, TViewModel> _service { get { return _viewModelService; } }

        public string ModuleName;    // 业务实体所对应的模块的名称
        public string FunctionName;  // 业务实体对应的实际名称，用于在前端显示相关的名称

        public string IndexViewPath;                // Index 页面的路径
        public string ListPartialViewPath;          // List 局部页的路径
        public string CreateOrEditPartialViewPath;  // 新建或者编辑局部页的路径
        public string DetailPartialViewPath;        // 新建或者编辑局部页的路径

      

        /// <summary>
        /// 构造函数，除了注入的视图模型处理服务外，还需要处理以下配置：
        /// 1. 设置视图路径，在派生控制器中只选择 4 种视图模板的其中一种；
        /// 2. 设置导航类型名称参数；
        /// 3. 设置列表视图参数；
        /// 4. 设置编辑和新建数据视图参数；
        /// 5. 设置明细数据视图参数
        /// </summary>
        /// <param name="service"></param>
        public BasePaginationTemplateController(IViewModelService<TEntity, TViewModel> service)
        {
            _viewModelService = service;

        }

       

     

    }
}
